﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace GameCore
{
    public class Board
    {
        public enum plcolor { white, black }; // цвет игрока
        private List<Figure> WFigures; //белые фигуры
        private List<Figure> BFigures; //черные фигуры

        private List<Figure> WFiguresOff; //убитые белые
        private List<Figure> BFiguresOff; //убитые черные

        private plcolor CurrentPlayer; // кто сейчас ходит

        public Board()
        {
            WFigures = new List<Figure>();
            BFigures = new List<Figure>();
            WFiguresOff = new List<Figure>();
            BFiguresOff = new List<Figure>();
            CurrentPlayer = plcolor.white; //первым ходит белый
        }

        private void MoveFigureTo (Figure f, int newcol, int newrow) 
        {

            if (f.Color == plcolor.white)
            {
                WFigures[WFigures.IndexOf(f)].ChangePosition(newcol,newrow);
            }
            if (f.Color == plcolor.black)
            {
                BFigures[BFigures.IndexOf(f)].ChangePosition(newcol,newrow);
            }


        }

        private void MoveFigureOffBoard(Figure f)
        {
            if (f.Color == plcolor.white)
            {
                WFiguresOff.Add(f);
                WFigures.Remove(f);
            }
            if (f.Color == plcolor.black)
            {
                BFiguresOff.Add(f);
                BFigures.Remove(f);
            }
        }

        private void MakeMove(Figure f, int newcol, int newrow)
        {
            //проверка на корректность хода
            if (!EmptyAt(newcol, newrow))
            {
                MoveFigureOffBoard(GetFigureAt(newcol, newrow));
            }
            MoveFigureTo(f, newcol, newrow);

            SwitchPlayers();
        }

        private void SwitchPlayers()
        {
            if (CurrentPlayer == plcolor.black) CurrentPlayer = plcolor.white; else CurrentPlayer = plcolor.black;
        }

        public bool EmptyAt(int col, int row)
        {
            foreach (Figure fig in WFigures)
            {
                if (fig.Pos.ColIndex == col && fig.Pos.RowIndex == row) return true;
            }
            foreach (Figure fig in BFigures)
            {
                if (fig.Pos.ColIndex == col && fig.Pos.RowIndex == row) return true;
            }
            return false;
        } //проверка на пустоту позиции


        private Figure GetFigureAt(int col, int row)
        {
            foreach (Figure fig in WFigures)
            {
                if (fig.Pos.ColIndex == col && fig.Pos.RowIndex == row) return fig;
            }
            foreach (Figure fig in BFigures)
            {
                if (fig.Pos.ColIndex == col && fig.Pos.RowIndex == row) return fig;
            }
            throw new ApplicationException("Position is empty");
        } //что стоит на данной клетке



    }
}
